// pages/tabBar/car/car.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    address: [],
    cartList: [],
    allChecked: false,
    combinedPrice: 0,
    combinedNum: 0,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 判断用户是否已登录
    // wx.getSetting({
    //   success: (result) => {
    //     console.log(result)
    //     if(result.authSetting['scope.userInfo']){
    //       console.log('已登录')
    //     }else{
    //       console.log("未登录");
    //     }
    //   },
    //   fail: () => {},
    //   complete: () => {}
    // });
    // wx.login({
    //   timeout:10000,
    //   success: (result) => {
    //     console.log(result)
    //   }
    // });
    // wx.getUserProfile({
    //   desc: '用于完善会员资料', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
    //   success: (res) => {
    //     // this.setData({
    //     //   userInfo: res.userInfo,
    //     //   hasUserInfo: true
    //     // })
    //     console.log(res)
    //   }
    // })
  },
  // 获取位置授权
  handleAdress(e) {
    // console.log (e)
    /**
     * 1.判断用户是否已确认授权
     * （3种状态：1.以授权 scop ：true 2.取消授权 scop : false 3.初始状态 undefined）
     * 2.如果为已授权或者初始状态 ，则调用授权api
     * 3.如果为取消授权 scop：false ,则引导用户开启授
     * (api 更改，调用api无需用户授权)
     */
    wx.getSetting({
      success: (result) => {
        console.log(result);
        if (result.authSetting["scope.userInfo"] === true) {
          // 已登录
          wx.chooseAddress({
            success: (result) => {
              console.log(result);
              wx.setStorageSync("address", result);
              this.setData({
                address: result,
              });
            },
          });
        } else {
          // 未登录
          // wx.login({
          //   timeout:10000,
          //   success: (result) => {

          //   }
          // });
          console.log("未登录");
        }
      },
    });

    /**
   * //调用开启用户权限的api
    wx.openSetting({
      success: (result)=>{
        console.log(result);
      },
      fail: ()=>{},
      complete: ()=>{}
    });
   */
  },
  /**
   * 读取添加购物车的缓存数据
   */
  getcartList() {
    const cartList = wx.getStorageSync("cart") || [];
    // console.log(cartList);
    this.setData({
      cartList,
    });
    // console.log(this.data.cartList)
  },
  /**
   * 绑定增加和减少商品购买数量
   */
   handleRememberNum(e) {
    /**
     * 绑定同一个点击事件
     * 通过判断自定义属性的值确定为增还是减
     * 获取购物车数组，来获取所修改的对象
     * 如果num == 1 并且 传递的属性为-1 
     * 弹出提示是否删除商品
     * 修改对象的num数据
     * 添加进入缓存中
     */
    let {options,id} = e.currentTarget.dataset
    // console.log(options,id)
    const cartList = this.data.cartList
    const index = cartList.findIndex(v=>v.goods_id === id)
    if(cartList[index].num===1&&options ==-1){
        wx.showModal({
          title: '提示',
          content: '是否删除该商品.',
          success: (result) => {
            if(result.confirm){
              cartList.splice(index,1)
              this.setCart_prict_num_check(cartList)
            }
          },
        });
    }else{
      cartList[index].num+=options
      this.setCart_prict_num_check(cartList)
    }
    
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 获取缓存中的地址信息
    const address = wx.getStorageSync("address") || [];
    this.setData({
      address
    })
    // 获取缓存中的购物车商品信息
    const cartList = wx.getStorageSync("cart") || [];
    // 全选功能
    this.setCart_prict_num_check(cartList)
  },

  /**
   * 复选框状态改变
   */
  handleCheckedChange(e) {
    /**
     * 商品的选中:
     * 1.获取被修改的对象
     * 2.修改商品选中状态
     * 3.重新填充回data和缓存中
     * 4.重新计算总价，结算数量，全选
     *  */
    const { id } = e.currentTarget.dataset;
    // console.log(id);
    const cartList = this.data.cartList;
    const index = cartList.findIndex((v) => v.goods_id === id);
    // console.log(index);
    // 修改选中状态
    cartList[index].check = !cartList[index].check;
    
    // 重新计算合计总价，总数
    this.setCart_prict_num_check(cartList)
  },
  /**
   * 设置商品结算总价，数量，全选
   */
  setCart_prict_num_check(cartList){
     /**
     * every() 数组方法 回遍历数组 会接收一个回调函数 每个回调函数都返回true 那么返回true
     * 如果有一个返回为false 那么返回false
     * 注意：如果数组为空，则返回为true
     */
    // const allChecked = cartList.length ? cartList.every((v) => v.check) : false;
    let allChecked = true;
    let combinedPrice = 0;
    let combinedNum = 0;
    cartList.forEach((v) => {
      if (v.check) {
        combinedPrice += v.num * v.goods_price;
        combinedNum += v.num;
      } else {
        allChecked = false;
      }
    });
    // 判断数组为空数组是的处理
    allChecked = allChecked.length != 0 ? allChecked : false;
    this.setData({
      cartList,
      allChecked,
      combinedPrice,
      combinedNum,
    });
    wx.setStorageSync("cart", cartList);
  },
  /**
   * 全选功能
   */
   handleAllCheck(){
     /**
      * 1.获取cartList和allCheck 数据
      * 2.allCheck 取反
      * 3.设置所有的选中状态为allCheck
      * 4.修改总价和数量并添加缓存
      */
     let {cartList,allChecked} = this.data;
     allChecked = !allChecked;
     cartList.forEach(v=>v.check = allChecked)
     this.setCart_prict_num_check(cartList)
   },
  // 结算功能
  handleSettlement(){
    let {address,combinedNum} = this.data
    if(!address.userName){
      wx.showToast({
        title: '您还没有选择收货地址',
        icon: 'none',
        mask: true,
      });
      return;
    }
    if(combinedNum===0){
      wx.showToast({
        title: '您好没有选购商品',
        icon: 'none',
        mask: true,
      });
      return;
    }
    // 条件满足，跳转到支付页面
    wx.navigateTo({
      url: '../../pay/index',
    });
  },
});
